package com.dingding.service.chatmessageservice.impl;

import org.apache.log4j.Logger;

import com.dingding.bean.databean.request.ReqRongCloud;
import com.dingding.bean.databean.response.DataResponse;
import com.dingding.common.core.beans.ChatMessages;
import com.dingding.common.core.util.DateFormatUtil;
import com.dingding.common.core.util.ToolUtil;
import com.dingding.service.BaseService;
import com.dingding.service.chatmessageservice.IChatMessageService;

/**
 * @ClassName: ChatMessageServiceImpl 
 * @Description: 聊天消息Service实现类
 * @author YHQ
 * @date 2016年4月22日 下午5:20:55
 */
public class ChatMessageServiceImpl extends BaseService implements IChatMessageService {

	private Logger log = Logger.getLogger(this.getClass());
	
	/**
	 * @Title: saveChatMessage 
	 * @Description: 保存聊天记录
	 * @param reqRongCloud 要保存的聊天记录对象
	 * @author YHQ 
	 * @return boolean    true:成功   false:失败
	 */
	@Override
	public boolean saveChatMessage(ReqRongCloud reqRongCloud) {
		
		//创建融云聊天记录对象
		ChatMessages chatMessages = new ChatMessages();
		
		//判断传入的聊天记录是否为空
		boolean flag = this.typeConversion(reqRongCloud, chatMessages);
		
		//判断传入的参数是否正确
		if(!flag){
			return flag;
		}
		
		return super.chatMessageDao.saveChatMessage(chatMessages);
	}

	/**
	 * @Title: typeConversion 
	 * @Description: 类型转换(将reqRongCloud融云请求参数转为chatMessages) 
	 * @param reqRongCloud 融云请求参数
	 * @param chatMessages 融云消息实体Bean
	 * @author YHQ 
	 * @return void    返回类型
	 */
	public boolean typeConversion(ReqRongCloud reqRongCloud,ChatMessages chatMessages){
		
		//判断传入的聊天记录是否为空
		if(reqRongCloud == null
				||ToolUtil.isBlank(reqRongCloud.getFromUserId()) 
				|| ToolUtil.isBlank(reqRongCloud.getToUserId())
				|| ToolUtil.isBlank(reqRongCloud.getObjectName())
				|| ToolUtil.isBlank(reqRongCloud.getTimestamp())
				|| ToolUtil.isBlank(reqRongCloud.getChannelType())
				|| ToolUtil.isBlank(reqRongCloud.getMsgTimestamp())
				|| ToolUtil.isBlank(reqRongCloud.getMsgUID())){
			
			log.error("保存聊天记录时客户端传入的参数为空");
			return false;
		}
		
		//主键
		chatMessages.setId(ToolUtil.getUid());
		//发送用户 Id
		chatMessages.setFromUserId(reqRongCloud.getFromUserId());
		//接收用户 Id
		chatMessages.setToUserId(reqRongCloud.getToUserId());
		//消息类型 1 文本消息 ，2 图片消息，3 语音消息，4 图文消息，5 位置消息，6 添加联系人消息，7 提示条通知消息，8 资料通知消息，9 通用命令通知消息，10 客服握手消息，11 客服挂断消息
		if(reqRongCloud.getObjectName().equals("RC:TxtMsg")){//文本消息
			chatMessages.setObjectName(1);
		}else if(reqRongCloud.getObjectName().equals("RC:ImgMsg")){//图片消息
			chatMessages.setObjectName(2);
		}else if(reqRongCloud.getObjectName().equals("RC:LBSMsg")){//位置消息
			chatMessages.setObjectName(5);
		}else{
			
			log.error("消息类型超出处理范围，暂不处理！");
			return false;
		}
		
		//发送消息内容
		chatMessages.setContent(reqRongCloud.getContent());
		
		//服务端收到客户端发送消息时的服务器时间（1970年到现在的毫秒数）
		String[] timestamp = reqRongCloud.getTimestamp().split(",");
		
		//客户端发送消息时间
		chatMessages.setTimestampStart(DateFormatUtil.millisecondToDate(Long.valueOf(timestamp[0].trim())));
		//服务器段接收时间
		chatMessages.setTimestampEnd(DateFormatUtil.millisecondToDate(Long.valueOf(timestamp[1].trim())));
		//会话类型  (二人会话是 1 、讨论组会话是 2 、群组会话是 3 、聊天室会话是 4 、客服会话是 5 、 系统通知是 6 、应用公众服务是 7 、公众服务是 8)
		if(reqRongCloud.getChannelType().equals("PERSON")){
			chatMessages.setChannelType(1);
		}else{
			log.error("会话类型超出处理范围，暂不处理！");
			return false;
		}
		//timestamp 的别名
		chatMessages.setMsgTimestamp(reqRongCloud.getMsgTimestamp());
		//可通过 msgUID 确定消息唯一。
		chatMessages.setMsgUID(reqRongCloud.getMsgUID());
		
		return true;
	}
	
	@Override
	public void setStatus(DataResponse dataResponse, int status) {
		
	}

}
